/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tamnhat.controller;

import com.tamnhat.entity.Partner;
import com.tamnhat.entity.Product;
import com.tamnhat.entity.ProductPartner;
import com.tamnhat.manager.model.PartnerModel;
import com.tamnhat.manager.model.ProductModel;
import com.tamnhat.manager.model.ProductPartnerModel;
import com.telsoft.applet.util.DateUtil;
import com.telsoft.applet.util.StringUtil;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 *
 * @author Administrator
 */
public class PartnerController implements Serializable {

    private Partner oldCurrent = new Partner();
    private Partner current= new Partner();
    
    private List<Partner> listPartner = new ArrayList<Partner>();
    private DataModel items;
    private DataModel allProduct;
    private DataModel partnerProduct;
    private ProductPartner currentPP;
    private Product[] listPPInsert;
    private String id;
    private String nameS;
    private String code;
    private String name;
    private String status;

    /**
     * Creates a new instance of PartnerController
     */
    public PartnerController() {
        try {
            listPartner = PartnerModel.getAll("");
            items = new ListDataModel(listPartner);
        } catch (Exception e) {
            e.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(e.getMessage()));
        }
    }

    public List<Partner> getListPartner() {
        return listPartner;
    }

    public void setListPartner(List<Partner> listPartner) {
        this.listPartner = listPartner;
    }

    public ProductPartner getCurrentPP() {
        return currentPP;
    }

    public void setCurrentPP(ProductPartner currentPP) {
        this.currentPP = currentPP;
    }

    public Product[] getListPPInsert() {
        return listPPInsert;
    }

    public void setListPPInsert(Product[] listPPInsert) {
        this.listPPInsert = listPPInsert;
    }

    public DataModel getPartnerProduct() {
        return partnerProduct;
    }

    public void setPartnerProduct(DataModel partnerProduct) {
        this.partnerProduct = partnerProduct;
    }

    public DataModel getAllProduct() {
        return allProduct;
    }

    public void setAllProduct(DataModel allProduct) {
        this.allProduct = allProduct;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getNameS() {
        return nameS;
    }

    public void setNameS(String nameS) {
        this.nameS = nameS;
    }    

    public Partner getCurrent() {
        return current;
    }

    public void setCurrent(Partner current) {
        this.current = current;
    }

    public DataModel getItems() {
        return items;
    }

    public void setItems(DataModel items) {
        this.items = items;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String search() {
        try {
            listPartner = PartnerModel.getAll(" and upper(partner_name) like '%" + nameS.toUpperCase() + "%'");
            items = new ListDataModel(listPartner);
            int i = items.getRowCount();
            if (i > 0) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Có " + i + " bản ghi được tìm thấy!"));
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Không có bản ghi nào được tìm thấy!"));
            }
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: "+e.getMessage()));
        }
        return "";
    }

    public String updateInsert(){
        current = new Partner();
        return "";
    }
    
    public String insert() {
        try {            
            if (PartnerModel.insert(current)) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Thêm bản ghi thành công"));
                try {
                    listPartner.add(current);
                } catch (Exception e) {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(e.getMessage()));
                }
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Xảy ra lỗi trong quá trình xử lí"));
            }
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
            e.printStackTrace();
        }
        return "";
    }

    public String remove() {
        try {
            current = (Partner) items.getRowData();
            if (PartnerModel.remove(current.getId())) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Xóa bản ghi thành công"));
                listPartner.remove(current);
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Xảy ra lỗi trong quá trình xử lí"));
            }
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
            e.printStackTrace();
        }
        return "";
    }

    public String updateDlgEdit() {
        current = (Partner) items.getRowData();        
        oldCurrent = current;
        return "";
    }

    public String updateDlgEditPP() {
        currentPP = (ProductPartner) partnerProduct.getRowData();
        currentPP.setSDate(DateUtil.toDate(currentPP.getStartDate(), "dd-MM-yyyy"));
        if (currentPP.getEndDate() != null) {
            currentPP.setEDate(DateUtil.toDate(currentPP.getEndDate(), "dd-MM-yyyy"));
        }
        return "";
    }

    public String update() {
        try {            
            if (PartnerModel.update(current)) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Cập nhật thành công"));                
            } else {
                current = oldCurrent;
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Xảy ra lỗi trong quá trình xử lí"));
            }
        } catch (Exception e) {
            current = oldCurrent;
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
            e.printStackTrace();
        }
        return "";
    }

    public String editPP() {
        try {
            Date StartDate = currentPP.getSDate();
            Date EndDate = currentPP.getEDate();


            if (StartDate == null) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(currentPP.getProductName() + ", Ngày bắt đầu hoặc Ngày kết thúc không được bỏ trống! "));
                return "";
            }

            if (EndDate != null && EndDate.compareTo(StartDate) <= 0) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(currentPP.getProductName() + ", Ngày bắt đầu phải nhỏ hơn ngày kết thúc! "));
                return "";
            }
            if (EndDate == null) {
            }
            String partnerId = current.getId();
            if (ProductPartnerModel.update(currentPP)) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(currentPP.getProductName() + ", Cập nhật thành công! "));
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(currentPP.getProductName() + ", Xảy ra lỗi trong quá trình cập nhật! "));
                allProduct = new ListDataModel(ProductModel.getAll());
                partnerProduct = new ListDataModel(ProductModel.getProductPartner(partnerId));
                return "";
            }
            allProduct = new ListDataModel(ProductModel.getAll());
            partnerProduct = new ListDataModel(ProductModel.getProductPartner(partnerId));
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
            e.printStackTrace();
        }
        return "";
    }

    public String updateToDlgP() {
        try {
            current = (Partner) items.getRowData();
            allProduct = new ListDataModel(ProductModel.getAll());
            partnerProduct = new ListDataModel(ProductModel.getProductPartner(current.getId()));
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
            e.printStackTrace();
        }
        return "";
    }

    public String updatePP() {
        try {
            if (listPPInsert.length <= 0) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Bạn chưa chọn Product nào để cập nhật! "));
                return "";
            }
            String partnerId = current.getId();
            for (int i = 0; i < listPPInsert.length; i++) {
                Date StartDate = listPPInsert[i].getStartDate();
                Date EndDate = listPPInsert[i].getEndDate();

                if (StartDate == null) {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(listPPInsert[i].getName() + ", Ngày bắt đầu hoặc Ngày kết thúc không được bỏ trống! "));
                    return "";
                }

                if (EndDate != null && EndDate.compareTo(StartDate) <= 0) {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(listPPInsert[i].getName() + ", Ngày bắt đầu phải nhỏ hơn ngày kết thúc! "));
                    return "";
                }

                if (ProductPartnerModel.insert(listPPInsert[i], partnerId)) {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(listPPInsert[i].getName() + ", Cập nhật thành công! "));
                } else {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(listPPInsert[i].getName() + ", Xảy ra lỗi trong quá trình cập nhật! "));
                    allProduct = new ListDataModel(ProductModel.getAll());
                    partnerProduct = new ListDataModel(ProductModel.getProductPartner(partnerId));
                    return "";
                }
            }
            allProduct = new ListDataModel(ProductModel.getAll());
            partnerProduct = new ListDataModel(ProductModel.getProductPartner(partnerId));
            listPPInsert = new Product[1000];
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
            e.printStackTrace();
        }
        return "";
    }

    public String updateDelPP() {
        currentPP = (ProductPartner) partnerProduct.getRowData();
        return "";
    }

    public String removePP() {
        try {
            String id = currentPP.getId();
            String partnerId = current.getId();
            if (ProductPartnerModel.remove(id)) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Xóa bản ghi thành công! "));
                allProduct = new ListDataModel(ProductModel.getAll());
                partnerProduct = new ListDataModel(ProductModel.getProductPartner(partnerId));
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Xảy ra lỗi trong quá trình xử lí! "));
            }
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR: " + e.getMessage()));
            e.printStackTrace();
        }
        return "";
    }
}
